package com.cskaoyan.javase.file._1api;

import javax.xml.transform.Source;
import java.io.File;
import java.io.FileOutputStream;

/**
 * 牛刀小试：
 * 判断某个目录下有没有“a.txt”文件，仅考虑单层目录下，不需要深入到二级目录。如果找到就输出它的绝对路径，没有找到就返回一个"没有该文件"字符串。
 *
 * 判断某个目录下有没有“a.txt”文件，需要考虑二级（乃至于更多级）目录。如果找到就输出它的绝对路径，没有找到就返回一个"没有该文件"字符串。
 * @since 11:42
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo2 {
    public static void main(String[] args) {
        File src = new File("e:\\1");
        // System.out.println(getAFile(src));
        getAFileRecursion(src);

        System.out.println("----------------------");
        String[] result = new String[10];
        getAFileRecursion2(src, result);
        for (String file : result) {
            System.out.println(file);
        }
    }

    public static String getAFile(File f) {
        // 1.先获取当前目录下的所有文件/文件夹的名字(或者直接用带过滤器的)
        // 2.遍历结果,有就输出绝对路径,没有就输出"没有该文件"
        File[] files = f.listFiles();
        if (files == null) {
            return "路径不合法或者是文件";
        }
        for (File file : files) {
            if (file.isFile()) {
                if (file.getName().equals("a.txt")) {
                    return file.getAbsolutePath();
                }
            }
        }
        return "没有该文件";
    }

    public static void getAFileRecursion(File f) {
        // 1.先获取当前目录下的所有文件/文件夹的名字
        File[] files = f.listFiles();
        if (files == null) {
            System.out.println("传入的路径不合法或者是文件!");
            return;
        }
        // 2.遍历逐一判断,如果是文件,就直接判断是不是目标文件
        for (File file : files) {
            if (file.isFile()) {
                if (file.getName().equals("a.txt")) {
                    System.out.println(file.getAbsolutePath());
                }
            } else {
                // 不是文件,是文件夹
                // 3.如果是文件夹,递归遍历判断
                getAFileRecursion(file);
            }
        }
    }

    static int index = 0;

    public static void getAFileRecursion2(File f, String[] result) {
        // 1.先获取当前目录下的所有文件/文件夹的名字
        File[] files = f.listFiles();
        if (files == null) {
            System.out.println("传入的路径不合法或者是文件!");
            return;
        }
        // 2.遍历逐一判断,如果是文件,就直接判断是不是目标文件
        for (File file : files) {
            if (file.isFile()) {
                if (file.getName().equals("a.txt")) {
                    result[index] = file.getAbsolutePath();
                    index++;
                }
            } else {
                // 不是文件,是文件夹
                // 3.如果是文件夹,递归遍历判断
                getAFileRecursion2(file, result);
            }
        }
    }
}
